#include "color.h"

// 预定义主题数组
static const ColorStyle theme_presets[] = {
    [THEME_DEFAULT] = {  // 索引0
        .fg = COLOR_FG_DEFAULT,
        .bg = COLOR_BG_DEFAULT,
        .style = STYLE_NORMAL
    },
    [THEME_ERROR] = {    // 索引1
        .fg = COLOR_FG_WHITE,
        .bg = COLOR_BG_RED,
        .style = STYLE_BOLD
    },
    [THEME_WARNING] = {  // 索引2
        .fg = COLOR_FG_BLACK,
        .bg = COLOR_BG_YELLOW,
        .style = STYLE_BOLD
    },
    [THEME_SUCCESS] = {  // 索引3
        .fg = COLOR_FG_BLACK,
        .bg = COLOR_BG_GREEN,
        .style = STYLE_BOLD
    },
    [THEME_DEBUG] = {    // 索引4
        .fg = COLOR_FG_WHITE,
        .bg = COLOR_BG_BLUE,
        .style = STYLE_UNDERLINE
    }
};

// 获取配置方案
const ColorStyle* theme_get(Theme theme) 
{
    if (theme >= THEME_CUSTOM || theme < 0) {
        return &theme_presets[THEME_DEFAULT];
    }
    return &theme_presets[theme];
}

/*
** 功能：颜色格式化输出
** style：颜色方案（前景，背景，样式）
** format：跟printf一样
** ...：更具format的参数格式，决定几个参数
*/ 
void color_print(ColorStyle style, const char *format, ...) {
    va_list args;
    va_start(args, format);

    // 应用样式组件
    if (style.style) fputs(style.style, stdout);  // 文字样式
    if (style.fg) fputs(style.fg, stdout);        // 前景色
    if (style.bg) fputs(style.bg, stdout);        // 背景色

    // 输出用户内容
    vprintf(format, args);

    // 重置所有终端属性
    fputs(COLOR_RESET_ALL, stdout);
    
    va_end(args);
}